
dojo.provide("dojo.storage.browser");dojo.require("dojo.storage");dojo.require("dojo.flash");dojo.require("dojo.json");dojo.require("dojo.uri.*");dojo.storage.browser.FileStorageProvider=function(){};dojo.inherits(dojo.storage.browser.FileStorageProvider,dojo.storage);dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME="__dojoAllKeys";dojo.storage.browser.FileStorageProvider._APPLET_ID="__dojoFileJavaObj";dojo.lang.extend(dojo.storage.browser.FileStorageProvider,{namespace:"default",initialized:false,_available:null,_statusHandler:null,_keyIndex:new Array(),initialize:function(){if(djConfig["disableFileStorage"]==true){return;}
this._loadKeyIndex();this.initialized=true;dojo.storage.manager.loaded();},isAvailable:function(){this._available=false;var protocol=window.location.protocol;if(protocol.indexOf("file")!=-1||protocol.indexOf("chrome")!=-1){this._available=this._isAvailableXPCOM();if(this._available==false){this._available=this._isAvailableActiveX();}}
return this._available;},put:function(key,value,resultsHandler){if(this.isValidKey(key)==false){dojo.raise("Invalid key given: "+key);}
this._statusHandler=resultsHandler;try{this._save(key,value);resultsHandler.call(null,dojo.storage.SUCCESS,key);}
catch(e){this._statusHandler.call(null,dojo.storage.FAILED,key,e.toString());}},get:function(key){if(this.isValidKey(key)==false){dojo.raise("Invalid key given: "+key);}
var results=this._load(key);return results;},getKeys:function(){return this._keyIndex;},hasKey:function(key){if(this.isValidKey(key)==false){dojo.raise("Invalid key given: "+key);}
this._loadKeyIndex();var exists=false;for(var i=0;i<this._keyIndex.length;i++){if(this._keyIndex[i]==key){exists=true;}}
return exists;},clear:function(){this._loadKeyIndex();var keyIndex=new Array();for(var i=0;i<this._keyIndex.length;i++){keyIndex[keyIndex.length]=new String(this._keyIndex[i]);}
for(var i=0;i<keyIndex.length;i++){this.remove(keyIndex[i]);}},remove:function(key){if(this.isValidKey(key)==false){dojo.raise("Invalid key given: "+key);}
this._loadKeyIndex();for(var i=0;i<this._keyIndex.length;i++){if(this._keyIndex[i]==key){this._keyIndex.splice(i,1);break;}}
this._save(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME,this._keyIndex,false);var fullPath=this._getPagePath()+key+".txt";if(this._isAvailableXPCOM()){this._removeXPCOM(fullPath);}else{if(this._isAvailableActiveX()){this._removeActiveX(fullPath);}}},isPermanent:function(){return true;},getMaximumSize:function(){return dojo.storage.SIZE_NO_LIMIT;},hasSettingsUI:function(){return false;},showSettingsUI:function(){dojo.raise(this.getType()+" does not support a storage settings user-interface");},hideSettingsUI:function(){dojo.raise(this.getType()+" does not support a storage settings user-interface");},getType:function(){return"dojo.storage.browser.FileStorageProvider";},_save:function(key,value,updateKeyIndex){if(typeof updateKeyIndex=="undefined"){updateKeyIndex=true;}
if(dojo.lang.isString(value)==false){value=dojo.json.serialize(value);value="/* JavaScript */\n"+value+"\n\n";}
var fullPath=this._getPagePath()+key+".txt";if(this._isAvailableXPCOM()){this._saveFileXPCOM(fullPath,value);}else{if(this._isAvailableActiveX()){this._saveFileActiveX(fullPath,value);}}
if(updateKeyIndex){this._updateKeyIndex(key);}},_load:function(key){var fullPath=this._getPagePath()+key+".txt";var results=null;if(this._isAvailableXPCOM()){results=this._loadFileXPCOM(fullPath);}else{if(this._isAvailableActiveX()){results=this._loadFileActiveX(fullPath);}else{if(this._isAvailableJava()){results=this._loadFileJava(fullPath);}}}
if(results==null){return null;}
if(!dojo.lang.isUndefined(results)&&results!=null&&/^\/\* JavaScript \*\//.test(results)){results=dojo.json.evalJson(results);}
return results;},_updateKeyIndex:function(key){this._loadKeyIndex();var alreadyAdded=false;for(var i=0;i<this._keyIndex.length;i++){if(this._keyIndex[i]==key){alreadyAdded=true;break;}}
if(alreadyAdded==false){this._keyIndex[this._keyIndex.length]=key;}
this._save(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME,this._keyIndex,false);},_loadKeyIndex:function(){var indexContents=this._load(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME);if(indexContents==null){this._keyIndex=new Array();}else{this._keyIndex=indexContents;}},_saveFileXPCOM:function(filename,value){try{netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");var f=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);f.initWithPath(filename);var ouputStream=Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);ouputStream.init(f,32|4|8,256+128,null);ouputStream.write(value,value.length);ouputStream.close();}
catch(e){var msg=e.toString();if(e.name&&e.message){msg=e.name+": "+e.message;}
dojo.raise("dojo.storage.browser.FileStorageProvider._saveFileXPCOM(): "+msg);}},_loadFileXPCOM:function(filename){try{netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");var f=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);f.initWithPath(filename);if(f.exists()==false){return null;}
var inp=Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);inp.init(f,1,4,null);var inputStream=Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);inputStream.init(inp);var results=inputStream.read(inputStream.available());return results;}
catch(e){var msg=e.toString();if(e.name&&e.message){msg=e.name+": "+e.message;}
dojo.raise("dojo.storage.browser.FileStorageProvider._loadFileXPCOM(): "+msg);}
return null;},_saveFileActiveX:function(filename,value){try{var fileSystem=new ActiveXObject("Scripting.FileSystemObject");var f=fileSystem.OpenTextFile(filename,2,true);f.Write(value);f.Close();}
catch(e){var msg=e.toString();if(e.name&&e.message){msg=e.name+": "+e.message;}
dojo.raise("dojo.storage.browser.FileStorageProvider._saveFileActiveX(): "+msg);}},_loadFileActiveX:function(filename){try{var fileSystem=new ActiveXObject("Scripting.FileSystemObject");if(fileSystem.FileExists(filename)==false){return null;}
var f=fileSystem.OpenTextFile(filename,1);var results=f.ReadAll();f.Close();return results;}
catch(e){var msg=e.toString();if(e.name&&e.message){msg=e.name+": "+e.message;}
dojo.raise("dojo.storage.browser.FileStorageProvider._loadFileActiveX(): "+msg);}},_saveFileJava:function(filename,value){try{var applet=dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID);applet.save(filename,value);}
catch(e){var msg=e.toString();if(e.name&&e.message){msg=e.name+": "+e.message;}
dojo.raise("dojo.storage.browser.FileStorageProvider._saveFileJava(): "+msg);}},_loadFileJava:function(filename){try{var applet=dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID);var results=applet.load(filename);return results;}
catch(e){var msg=e.toString();if(e.name&&e.message){msg=e.name+": "+e.message;}
dojo.raise("dojo.storage.browser.FileStorageProvider._loadFileJava(): "+msg);}},_isAvailableActiveX:function(){try{if(window.ActiveXObject){var fileSystem=new window.ActiveXObject("Scripting.FileSystemObject");return true;}}
catch(e){dojo.debug(e);}
return false;},_isAvailableXPCOM:function(){try{if(window.Components){netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);return true;}}
catch(e){dojo.debug(e);}
return false;},_isAvailableJava:function(){try{if(dojo.render.html.safari==true||dojo.render.html.opera==true()){if(navigator.javaEnabled()==true){return true;}}}
catch(e){dojo.debug(e);}
return false;},_getPagePath:function(){var path=window.location.pathname;if(/\.html?$/i.test(path)){path=path.replace(/(?:\/|\\)?[^\.\/\\]*\.html?$/,"");}
if(/^\/?[a-z]+\:/i.test(path)){path=path.replace(/^\/?/,"");path=path.replace(/\//g,"\\");}else{if(/^[\/\\]{2,3}[^\/]/.test(path)){path=path.replace(/^[\/\\]{2,3}/,"");path=path.replace(/\//g,"\\");path="\\\\"+path;}}
if(/\/$/.test(path)==false&&/\\$/.test(path)==false){if(/\//.test(path)){path+="/";}else{path+="\\";}}
path=unescape(path);return path;},_removeXPCOM:function(filename){try{netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");var f=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);f.initWithPath(filename);if(f.exists()==false||f.isDirectory()){return;}
if(f.isFile()){f.remove(false);}}
catch(e){dojo.raise("dojo.storage.browser.FileStorageProvider.remove(): "+e.toString());}},_removeActiveX:function(filename){try{var fileSystem=new ActiveXObject("Scripting.FileSystemObject");fileSystem.DeleteFile(filename);}
catch(e){dojo.raise("dojo.storage.browser.FileStorageProvider.remove(): "+e.toString());}},_removeJava:function(filename){try{var applet=dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID);applet.remove(filename);}
catch(e){var msg=e.toString();if(e.name&&e.message){msg=e.name+": "+e.message;}
dojo.raise("dojo.storage.browser.FileStorageProvider._removeJava(): "+msg);}},_writeApplet:function(){var archive=dojo.uri.moduleUri("dojo","../DojoFileStorageProvider.jar").toString();var tag="<applet "+"id='"+dojo.storage.browser.FileStorageProvider._APPLET_ID+"' "+"style='position: absolute; top: -500px; left: -500px; width: 1px; height: 1px;' "+"code='DojoFileStorageProvider.class' "+"archive='"+archive+"' "+"width='1' "+"height='1' "+">"+"</applet>";document.writeln(tag);}});dojo.storage.browser.WhatWGStorageProvider=function(){};dojo.inherits(dojo.storage.browser.WhatWGStorageProvider,dojo.storage);dojo.lang.extend(dojo.storage.browser.WhatWGStorageProvider,{namespace:"default",initialized:false,_domain:null,_available:null,_statusHandler:null,initialize:function(){if(djConfig["disableWhatWGStorage"]==true){return;}
this._domain=location.hostname;this.initialized=true;dojo.storage.manager.loaded();},isAvailable:function(){try{var myStorage=globalStorage[location.hostname];}
catch(e){this._available=false;return this._available;}
this._available=true;return this._available;},put:function(key,value,resultsHandler){if(this.isValidKey(key)==false){dojo.raise("Invalid key given: "+key);}
this._statusHandler=resultsHandler;if(dojo.lang.isString(value)){value="string:"+value;}else{value=dojo.json.serialize(value);}
window.addEventListener("storage",function(evt){resultsHandler.call(null,dojo.storage.SUCCESS,key);},false);try{var myStorage=globalStorage[this._domain];myStorage.setItem(key,value);}
catch(e){this._statusHandler.call(null,dojo.storage.FAILED,key,e.toString());}},get:function(key){if(this.isValidKey(key)==false){dojo.raise("Invalid key given: "+key);}
var myStorage=globalStorage[this._domain];var results=myStorage.getItem(key);if(results==null){return null;}
results=results.value;if(!dojo.lang.isUndefined(results)&&results!=null&&/^string:/.test(results)){results=results.substring("string:".length);}else{results=dojo.json.evalJson(results);}
return results;},getKeys:function(){var myStorage=globalStorage[this._domain];var keysArray=new Array();for(i=0;i<myStorage.length;i++){keysArray[i]=myStorage.key(i);}
return keysArray;},clear:function(){var myStorage=globalStorage[this._domain];var keys=new Array();for(var i=0;i<myStorage.length;i++){keys[keys.length]=myStorage.key(i);}
for(var i=0;i<keys.length;i++){myStorage.removeItem(keys[i]);}},remove:function(key){var myStorage=globalStorage[this._domain];myStorage.removeItem(key);},isPermanent:function(){return true;},getMaximumSize:function(){return dojo.storage.SIZE_NO_LIMIT;},hasSettingsUI:function(){return false;},showSettingsUI:function(){dojo.raise(this.getType()+" does not support a storage settings user-interface");},hideSettingsUI:function(){dojo.raise(this.getType()+" does not support a storage settings user-interface");},getType:function(){return"dojo.storage.browser.WhatWGProvider";}});dojo.storage.browser.FlashStorageProvider=function(){};dojo.inherits(dojo.storage.browser.FlashStorageProvider,dojo.storage);dojo.lang.extend(dojo.storage.browser.FlashStorageProvider,{namespace:"default",initialized:false,_available:null,_statusHandler:null,initialize:function(){if(djConfig["disableFlashStorage"]==true){return;}
var loadedListener=function(){dojo.storage._flashLoaded();};dojo.flash.addLoadedListener(loadedListener);var swfloc6=dojo.uri.moduleUri("dojo","../Storage_version6.swf").toString();var swfloc8=dojo.uri.moduleUri("dojo","../Storage_version8.swf").toString();dojo.flash.setSwf({flash6:swfloc6,flash8:swfloc8,visible:false});},isAvailable:function(){if(djConfig["disableFlashStorage"]==true){this._available=false;}else{this._available=true;}
return this._available;},put:function(key,value,resultsHandler){if(this.isValidKey(key)==false){dojo.raise("Invalid key given: "+key);}
this._statusHandler=resultsHandler;if(dojo.lang.isString(value)){value="string:"+value;}else{value=dojo.json.serialize(value);}
dojo.flash.comm.put(key,value,this.namespace);},get:function(key){if(this.isValidKey(key)==false){dojo.raise("Invalid key given: "+key);}
var results=dojo.flash.comm.get(key,this.namespace);if(results==""){return null;}
if(!dojo.lang.isUndefined(results)&&results!=null&&/^string:/.test(results)){results=results.substring("string:".length);}else{results=dojo.json.evalJson(results);}
return results;},getKeys:function(){var results=dojo.flash.comm.getKeys(this.namespace);if(results==""){return[];}
return results.split(",");},clear:function(){dojo.flash.comm.clear(this.namespace);},remove:function(key){dojo.unimplemented("dojo.storage.browser.FlashStorageProvider.remove");},isPermanent:function(){return true;},getMaximumSize:function(){return dojo.storage.SIZE_NO_LIMIT;},hasSettingsUI:function(){return true;},showSettingsUI:function(){dojo.flash.comm.showSettings();dojo.flash.obj.setVisible(true);dojo.flash.obj.center();},hideSettingsUI:function(){dojo.flash.obj.setVisible(false);if(dojo.storage.onHideSettingsUI!=null&&!dojo.lang.isUndefined(dojo.storage.onHideSettingsUI)){dojo.storage.onHideSettingsUI.call(null);}},getType:function(){return"dojo.storage.browser.FlashStorageProvider";},_flashLoaded:function(){this._initialized=true;dojo.storage.manager.loaded();},_onStatus:function(statusResult,key){var ds=dojo.storage;var dfo=dojo.flash.obj;if(statusResult==ds.PENDING){dfo.center();dfo.setVisible(true);}else{dfo.setVisible(false);}
if((!dj_undef("_statusHandler",ds))&&(ds._statusHandler!=null)){ds._statusHandler.call(null,statusResult,key);}}});dojo.storage.manager.register("dojo.storage.browser.FileStorageProvider",new dojo.storage.browser.FileStorageProvider());dojo.storage.manager.register("dojo.storage.browser.WhatWGStorageProvider",new dojo.storage.browser.WhatWGStorageProvider());dojo.storage.manager.register("dojo.storage.browser.FlashStorageProvider",new dojo.storage.browser.FlashStorageProvider());dojo.storage.manager.initialize();